package Day01;

import java.util.Objects;

/**
 * @author feng
 * @Date 2021/12/22 15:56
 * 1.自动拆箱与装箱:处理基本数据类型转化成对象进行处理。
 * -128-127在自动装箱与拆箱时不会自动创建对象，而是使用缓存节省空间。
 * 2. ==与equals
 * 3.equals与hashCode
 */
public class InterOf {
    public static void main(String[] args) {
//        Integer a = 130;
//        Integer b = 130;
//        System.out.println(a == b);       //内存地址
//        System.out.println(a.equals(b)); //包装类型重写equals对象存储内容

        /**
         * 总体来说，== 对于基本类型来说是值比较，对于引用类型来说是比较的是引用；
         * 而 equals 默认情况下是引用比较，只是很多类重写了 equals 方法，
         * 比如 String、Integer 等把它变成了值比较(实例对象判断)，所以一般情况下
         *  equals 比较的是值是否相等。
         */
        Cat 小米 = new Cat("小米");
        Cat 小高 = new Cat("小米");
        System.out.println(小米==小高);
        System.out.println(小米.equals(小高));
    }

}

class Cat {
    private String name;

    public Cat() {
    }

    public Cat(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return Objects.equals(name, cat.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}





